<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1、回调函数的概念
        // function a(){

        // }

        // function b(){

        // }
        // a(b)

        // 2、函数传递基本类型参数
        // function fn(a){
        //     // var a = number  将number变量栈区的值赋值给a变量
        //     console.log(a);
        // }
        
        // var number =10;
        // fn(number);
        // 3、参数传递引用类型
        // function fn2(a){
        //     // var a = arr  将arr变量栈区的值赋值给a变量 此时 arr与a变量地址指向同一份数据
        //     console.log(a);
        //     a[2] = 4;
        // }
        // var arr = [1,2,3];
        // fn2(arr);
        // 4、参数传递函数
        // 函数一旦创建 立马得到对应的内存地址
        // function fn3(a){
        //     // var a = cb; 将cb变量栈区的值赋值给a变量 此时a变量就与cb变量指向同一个内存空间
        //     console.log(a == cb);//true
        //     console.log(a)
        //     // a对应堆区存储的值是一个函数 既然是函数就可以()调用
        //     a()
        // }
        // function cb(){
        //     console.log('回调函数')
        // }
        // // cb是一个函数 cb 就是一个内存地址 数组也是一个内存地址
        // fn3(cb)
        // 5、回调函数的简化写法
        // function fn4(a){
        //     // var a = 0X888;
        //     a();
        // }
        // // 等价于 var cb = function(){}; fn4(cb);
        // fn4(function(){
        //     console.log('回调函数简化写法')
        // })
        

    </script>
</body>
</html>